package com.andnnl.num;

/**
 * 一个整数代表，32个数的组合
 * 把这个数拆分成每个数都是2的X次方
 * Created by chenss on 2021/4/7.
 */
public class NumSplitTest {
    public static void main(String[] args) {
        String mobile = "8612312341230";
//        if(mobile.length()==13 && mobile.startsWith("86")){
//            mobile=mobile.substring(2);
//        }

        if (mobile.length() > 11) { //有些网关返回的号码是：86+手机号码
            mobile = mobile.substring(mobile.length() - 11, mobile.length());
        }

        System.out.println(mobile);


        System.out.println("Math.pow(2,0):"+Math.pow(2,0));
        int aaa=12120;
        System.out.println("aaa："+aaa);
        String s = Integer.toBinaryString(aaa);
        System.out.println("二进制："+s);
        System.out.println("----------------tableSizeFor2");
//        tableSizeFor1(aaa);
        tableSizeFor2(aaa);
//        int aaa=Integer.MAX_VALUE;
        System.out.println("----------------转换成字符串再平方");
//        tableSizeFor1(aaa);
        for (int i = 0; i < s.length(); i++) {
            int idx = s.length() - i - 1;
            if("1".equals(s.substring(idx,idx+1))){

                System.out.println((int)Math.pow(2,i));
            }
        }


//        System.out.println(tableSizeFor1(aaa));
        System.out.println("----------------Math.sqrt");
        System.out.println((int)Math.sqrt(aaa));
        while(aaa-(aaa=aaa>>1)>0){
            System.out.println(aaa);
        }
        System.out.println("----------------Math.pow");
        for (int i = 0; i < 10; i++) {
            System.out.println(Math.pow(2,i));
        }
    }


    static final void tableSizeFor1(int cap) {

        int n = cap >> 1<<1;
        int length = 0;
        while (n>0){
            n = n >> 1;
            length ++;
            System.out.println(2 << length-1);
            System.out.println("剩余:");
        }
    }

    static final void tableSizeFor2(int cap) {
        int n = cap ;
        int length = 0;
        while (n>0){
            length++;//从右边开始，累计当前位数
//            if(n%2==1){//判断是否单数
//            if(n >> 1<<1 !=n){//判断是否单数
            if((n & 1)==1){//判断是否单数
                System.out.println((int)Math.pow(2,length-1));//打印当前位的平方
            }
            n = n >> 1;//右移1位，截掉1位最右边1位
        }
    }


    static final void bit(int num) {
        int n = num ;
        int length = 0;
        while (n>0){
            length++;//从右边开始，累计当前位数
//            if(n%2==1){//判断是否单数
//            if(n >> 1<<1 !=n){//判断是否单数
            if((n & 1)==1){//判断是否单数
                System.out.println((int)Math.pow(2,length-1));//打印当前位的平方
            }
            n = n >> 1;//右移1位，截掉1位最右边1位
        }
    }

}
